home *** CD-ROM | disk | FTP | other *** search
/ Belgian Amiga Club - ADF Collection / BS1 part 43.zip / Sources C- WorkDisk V.adf / peck / diropta.c < prev    next >
C/C++ Source or Header  |  1987-02-16  |  1KB  |  58 lines

  1. #include "libraries/dos.h"
  2. #include "exec/memory.h"
  3. extern struct FileLock *Lock(), *CurrentDir();
  4.  
  5. main()
  6. {
  7.  struct FileLock *oldlock;
  8.  oldlock = Lock("",ACCESS_READ);
  9.  if(oldlock != 0)
  10.  {
  11.   followthread(oldlock,0);
  12.  }
  13.  else
  14.  {
  15.   printf("Cann't lock currentdir\n");
  16.  }
  17.  
  18.  printf("\n");
  19. }
  20.  
  21. int followthread(lock,tab_level)
  22. struct FileLock *lock;
  23. int tab_level;
  24. {
  25.  struct FileInfoBlock *m;
  26.  struct FileLock *newlock, *oldlock, *ignoredlock;
  27.  int success,i;
  28.  
  29.  if(!lock) return(0);
  30.  
  31.  m=(struct FileInfoBlock *) AllocMem(sizeof(struct FileInfoBlock),MEMF_CLEAR);
  32.  
  33.  success = Examine(lock,m);
  34.  
  35.  while(success != 0)
  36.  {
  37.   if(m->fib_DirEntryType > 0)
  38.   {
  39.    newlock = Lock(&m->fib_FileName[0],ACCESS_READ);
  40.    oldlock = CurrentDir(newlock);
  41.    followthread(newlock,tab_level+1);
  42.    ignoredlock = CurrentDir(oldlock);
  43.   }
  44.   success = ExNext(lock,m);
  45.   if(success)
  46.   {
  47.    printf("\n");
  48.    for(i=0;i<tab_level;i++) printf("\t");
  49.    printf("%ls",&m->fib_FileName[0]);
  50.    if(m->fib_DirEntryType > 0) printf(" [dir]");
  51.   }
  52.  }
  53.  if(lock) UnLock(lock);
  54.  FreeMem(m,sizeof(struct FileInfoBlock));
  55. }
  56.   
  57.  
  58.